<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
  <meta charset="UTF-8"/>
  <meta name="viewport" content="width=device-width, initial-scale=1"/>
  <title>bpkg-common-options(1) bpkg 0.17.0</title>

  <style type="text/css">
/* file      : common.css
 * license   : MIT; see accompanying LICENSE file
 */

html
{
  font-family: "Helvetica Neue", Helvetica, "Segoe UI", Arial, freesans, sans-serif;
  font-weight: normal;
  font-size: 18px;
  line-height: 1.4em;
  letter-spacing: 0.01em;

  color: #292929;
}

body {margin: 0;} /* There is non-0 default margin for body. */

/* See notes on what's going on here. */
body {min-width: 17em;}
@media only screen and (min-width: 360px)
{
  body {min-width: 19em;}
}

/*
 * Header (optional).
 */

#header-bar
{
  width: 100%;

  background: rgba(0, 0, 0, 0.04);
  border-bottom: 1px solid rgba(0, 0, 0, 0.2);

  padding: .4em 0 .42em 0;
  margin: 0 0 1.4em 0;
}

#header
{
  /* Same as in #content. */
  max-width: 41em;
  margin: 0 auto 0 auto;
  padding: 0 .4em 0 .4em;

  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;

  width: 100%;
  display: table;
  border: none;
  border-collapse: collapse;
}

#header-logo, #header-menu
{
  display: table-cell;
  border: none;
  padding: 0;
  vertical-align: middle;
}

#header-logo {text-align: left;}
#header-menu {text-align: right;}

/* These overlap with #header's margin because of border collapsing. */
#header-logo {padding-left: .4em;}
#header-menu {padding-right: .4em;}

#header-logo a
{
  color: #000;
  text-decoration: none;
  outline: none;
}
#header-logo a:visited {color: #000;}
#header-logo a:hover, #header-logo a:active {color: #000;}

#header-menu a
{
  font-size: 0.889em;
  line-height: 1.4em;
  text-align: right;
  margin-left: 1.2em;
  white-space: nowrap;
  letter-spacing: 0;
}

#header-menu a
{
  color: #000;
  outline: none;
}
#header-menu a:visited {color: #000;}
#header-menu a:hover, #header-menu a:active
{
  color: #3870c0;
  text-decoration: none;
}

/* Flexbox-based improvements though the above works reasonably well. */
#header-menu-body
{
  width: 100%;

  display: -webkit-inline-flex;
  display: inline-flex;

  -webkit-flex-flow: row wrap;
  flex-flow: row wrap;

  -webkit-justify-content: flex-end;
  justify-content: flex-end;
}

/* Whether we want it (and at which point) depends on the size of the menu. */
/*
@media only screen and (max-width: 567px)
{
  #header-menu-body
  {
    -webkit-flex-direction: column;
    flex-direction: column;
  }
}
*/

/*
 * Content.
 */

#content
{
  max-width: 41em;
  margin: 0 auto 0 auto;
  padding: 0 .4em 0 .4em; /* Space between text and browser frame. */

  -webkit-box-sizing: border-box;
  -moz-box-sizing: border-box;
  box-sizing: border-box;
}

/*
 * Footer (optional).
 */

#footer
{
  color: #767676;
  font-size: 0.7223em;
  line-height: 1.3em;
  margin: 2.2em 0 1em 0;
  text-align: center;
}

#footer a
{
  color: #767676;
  text-decoration: underline;
}
#footer a:visited {color: #767676;}
#footer a:hover, #footer a:active {color: #3870c0;}

/* Screen size indicator in the footer. The before/after content is in case
   we don't have any content in the footer. Margin is to actually see the
   border separate from the browser frame. */

/*
#footer:before {content: "\A0";}
#footer:after {content: "\A0";}

#footer
{
  border-left: 1px solid;
  border-right: 1px solid;
  margin-left: 1px;
  margin-right: 1px;
}

@media only screen and (max-width: 359px)
{
  #footer {border-color: red;}
}

@media only screen and (min-width: 360px) and (max-width: 567px)
{
  #footer {border-color: orange;}
}

@media only screen and (min-width: 568px) and (max-width: 1023px)
{
  #footer {border-color: blue;}
}

@media only screen and (min-width: 1024px)
{
  #footer {border-color: green;}
}
*/

/*
 * Common elements.
 */

p, li, dd {text-align: justify;}
.code {text-align: left;} /* Manually aligned. */
pre {text-align: left;}   /* If it is inside li/dd. */

/* Notes. */

.note
{
  color: #606060;
}

div.note
{
  margin: 2em 0 2em 0; /* The same top/bottom margings as pre box. */

  padding-left: 0.5em;
  border: 0.25em;
  border-left-style: solid;
  border-color: #808080;

  page-break-inside: avoid;
}

div.note :first-child {margin-top:    0;}
div.note :last-child  {margin-bottom: 0;}

span.note::before {content: "[Note: "}
span.note::after  {content: "]"}

/* Links. */
a
{
  color: #3870c0;
  /*color: #4078c0;*/
  text-decoration: none;
}

a:hover, a:active
{
/*color: #006fbf;*/
/*color: #0087e7;*/
  text-decoration: underline;
}

a:visited
{
/*color: #003388;*/
  color: #00409c;
}

/* Standard paragraph. */

p, pre {margin: 1em 0 1em 0;}

/* Standard lists. */
ul, ol, dl {margin: 1em 0 1em 0;}
ul li, ol li {margin: 0 0 .4em 0;}
ul li {list-style-type: circle;}
dl dt {margin: 0 0 0 0;}
dl dd {margin: 0 0 .6em 1.8em;}

code, pre
{
  font-family: Consolas, "Liberation Mono", Menlo, Courier, monospace;
  font-size: 0.92em;
  letter-spacing: 0;
}

pre {white-space: pre-wrap;}
@media only screen and (max-width: 567px)
{
  pre {word-break: break-all;}
}

/* Use page rather than system font settings. */
input
{
  font-family: inherit;
  font-weight: inherit;
  font-size:   inherit;
  line-height: inherit;
}

/* file      : pre-box.css
 * license   : MIT; see accompanying LICENSE file
 */

/* Note: see also p-code-box.css. */

pre
{
  background-color: rgba(0, 0, 0, 0.05);
  border-radius: 0.2em;
  padding: .8em .4em .8em .4em;
  margin: 2em -.4em 2em -.4em; /* Use margins of #content. */
}

/* file      : man.css
 * license   : MIT; see accompanying LICENSE file
 */

/* Bases:
 *
 * common.css
 * pre-box.css
 *
 */

#content
{
  max-width: 42.1em;
  padding-left: 1.5em; /* Reserve for the heading. */
}

h1
{
  font-weight: normal;
  font-size: 1.58em;
  line-height: 1.4em;
  margin: 1.6em 0 .6em -.88em;
}

/* Definition list for options. */
dl.options dt {margin: 1em 0 0 0;}
dl.options dd {margin: .1em 0 0 4.5em;}

/* Make lists inside option descriptions a tad smaller. */
dl.options dd ul, dl.options dd ol, dl.options dd dl
{
  font-size: 0.889em;
  line-height: 1.4em;
}

  </style>

</head>
<body>
<div id="content">

  <h1>NAME</h1>

  <p><b><code>bpkg-common-options</code></b> &#8211; details on common options</p>
  <h1>SYNOPSIS</h1>

  <p class="code"><code><b>bpkg</b> [<i>common-options</i>] ...</code></p>

  <h1>DESCRIPTION</h1>

  <p>The common options control behavior that is common to all or most of the
  <code><b>bpkg</b></code> commands. They can be specified either before the
  command or after, together with the command-specific options.</p>

  <h1>COMMON OPTIONS</h1>

  <dl class="options">
    <dt><code><b>-v</b></code></dt>
    <dd>Print essential underlying commands being executed. This is equivalent
    to <code><b>--verbose 2</b></code>.</dd>

    <dt><code><b>-V</b></code></dt>
    <dd>Print all underlying commands being executed. This is equivalent to
    <code><b>--verbose 3</b></code>.</dd>

    <dt><code><b>--quiet</b></code>|<code><b>-q</b></code></dt>
    <dd>Run quietly, only printing error messages. This is equivalent to
    <code><b>--verbose 0</b></code>.</dd>

    <dt><code><b>--verbose</b></code> <code><i>level</i></code></dt>
    <dd>Set the diagnostics verbosity to <code><i>level</i></code> between 0
    and 6. Level 0 disables any non-error messages while level 6 produces lots
    of information, with level 1 being the default. The following additional
    types of diagnostics are produced at each level:

    <ol>
    <li>High-level information messages.</li>

    <li>Essential underlying commands being executed.</li>

    <li>All underlying commands being executed.</li>

    <li>Information that could be helpful to the user.</li>

    <li>Information that could be helpful to the developer.</li>

    <li>Even more detailed information.</li>
    </ol></dd>

    <dt><code><b>--stdout-format</b></code> <code><i>format</i></code></dt>
    <dd>Representation format to use for printing to
    <code><b>stdout</b></code>. Valid values for this option are
    <code><b>lines</b></code> (default) and <code><b>json</b></code>. See the
    JSON OUTPUT section below for details on the <code><b>json</b></code>
    format.</dd>

    <dt><code><b>--jobs</b></code>|<code><b>-j</b></code> <code><i>num</i></code></dt>
    <dd>Number of jobs to perform in parallel. If this option is not specified
    or specified with the <code>0</code> value, then the number of available
    hardware threads is used. This option is also propagated when performing
    build system operations such as <code><b>update</b></code>,
    <code><b>test</b></code>, etc.</dd>

    <dt><code><b>--no-result</b></code></dt>
    <dd>Don't print informational messages about the outcome of performing a
    command or some of its parts. Note that if this option is specified, then
    for certain long-running command parts progress is displayed instead,
    unless suppressed with <code><b>--no-progress</b></code>.</dd>

    <dt><code><b>--structured-result</b></code> <code><i>fmt</i></code></dt>
    <dd>Write the result of performing a command in a structured form. In this
    mode, instead of printing to <code><b>stderr</b></code> informational
    messages about the outcome of performing a command or some of its parts,
    <code><b>bpkg</b></code> writes to <code><b>stdout</b></code> a
    machine-readable result description in the specified format. Not all
    commands support producing structured result and valid
    <code><i>fmt</i></code> values are command-specific. Consult the command
    documentation for details.</dd>

    <dt><code><b>--progress</b></code></dt>
    <dd>Display progress indicators for long-lasting operations, such as
    network transfers, building, etc. If printing to a terminal the progress
    is displayed by default for low verbosity levels. Use
    <code><b>--no-progress</b></code> to suppress.</dd>

    <dt><code><b>--no-progress</b></code></dt>
    <dd>Suppress progress indicators for long-lasting operations, such as
    network transfers, building, etc.</dd>

    <dt><code><b>--diag-color</b></code></dt>
    <dd>Use color in diagnostics. If printing to a terminal the color is used
    by default provided the terminal is not dumb. Use
    <code><b>--no-diag-color</b></code> to suppress.</dd>

    <dt><code><b>--no-diag-color</b></code></dt>
    <dd>Don't use color in diagnostics.</dd>

    <dt><code><b>--build</b></code> <code><i>path</i></code></dt>
    <dd>The build program to be used to build packages. This should be the
    path to the build2 <code><b>b</b></code> executable. You can also specify
    additional options that should be passed to the build program with
    <code><b>--build-option</b></code>.

    <p>If the build program is not explicitly specified, then
    <code><b>bpkg</b></code> will by default use <code><b>b</b></code> plus an
    executable suffix if one was specified when building
    <code><b>bpkg</b></code>. So, for example, if <code><b>bpkg</b></code>
    name was set to <code><b>bpkg-1.0</b></code>, then it will look for
    <code><b>b-1.0</b></code>.</p></dd>

    <dt><code><b>--build-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional option to be passed to the build program. See
    <code><b>--build</b></code> for more information on the build program.
    Repeat this option to specify multiple build options.</dd>

    <dt><code><b>--fetch</b></code> <code><i>path</i></code></dt>
    <dd>The fetch program to be used to download resources. Currently,
    <code><b>bpkg</b></code> recognizes <code><b>curl</b></code>,
    <code><b>wget</b></code>, and <code><b>fetch</b></code>. Note that the
    last component of <code><i>path</i></code> must contain one of these names
    as a substring in order for <code><b>bpkg</b></code> to recognize which
    program is being used. You can also specify additional options that should
    be passed to the fetch program with <code><b>--fetch-option</b></code>.

    <p>If the fetch program is not specified, then <code><b>bpkg</b></code>
    will try to discover if one of the above programs is available and use
    that. Currently, <code><b>bpkg</b></code> has the following preference
    order: <code><b>curl</b></code>, <code><b>wget</b></code>, and
    <code><b>fetch</b></code>.</p></dd>

    <dt><code><b>--fetch-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional option to be passed to the fetch program. See
    <code><b>--fetch</b></code> for more information on the fetch program.
    Repeat this option to specify multiple fetch options.</dd>

    <dt><code><b>--fetch-timeout</b></code> <code><i>sec</i></code></dt>
    <dd>The fetch and fetch-like (for example, <code><b>git</b></code>)
    program timeout. While the exact semantics of the value depends on the
    program used, at a minimum it specifies in seconds the maximum time that
    can be spent without any network activity.

    <p>Specifically, it is translated to the <code><b>--max-time</b></code>
    option for <code><b>curl</b></code> and to the
    <code><b>--timeout</b></code> option for <code><b>wget</b></code> and
    <code><b>fetch</b></code>. For <code><b>git</b></code> over HTTP/HTTPS
    this semantics is achieved using the
    <code><b>http.lowSpeedLimit</b></code>=<i>1</i>
    <code><b>http.lowSpeedTime</b></code>=<i>sec</i> configuration values (the
    <code><b>git://</b></code> and <code><b>ssh://</b></code> protocols
    currently do not support timeouts).</p>

    <p>See <code><b>--fetch</b></code> and <code><b>--git</b></code> for more
    information on the fetch programs.</p></dd>

    <dt><code><b>--pkg-proxy</b></code> <code><i>url</i></code></dt>
    <dd>HTTP proxy server to use when fetching package manifests and archives
    from remote <code><b>pkg</b></code> repositories. If specified, the proxy
    <code><i>url</i></code> must be in the
    <code><b>http://</b><i>host</i>[<b>:</b><i>port</i>]</code> form. If
    <code><i>port</i></code> is omitted, 80 is used by default.

    <p>Note that to allow caching, the proxied <code><b>https://</b></code>
    URLs are converted to <code><b>http://</b></code> in order to prevent the
    fetch program from tunneling (which is the standard approach for proxying
    HTTPS). If both HTTP and HTTPS repositories are used, it is assumed that
    the proxy server can figure out which URLs need to be converted back to
    <code><b>https://</b></code> based on the request information (for
    example, host name). For security, this mechanism should only be used with
    signed repositories or when the proxy is located inside a trusted
    network.</p></dd>

    <dt><code><b>--git</b></code> <code><i>path</i></code></dt>
    <dd>The git program to be used to fetch git repositories. You can also
    specify additional options that should be passed to the git program with
    <code><b>--git-option</b></code>.

    <p>If the git program is not explicitly specified, then
    <code><b>bpkg</b></code> will use <code><b>git</b></code> by
    default.</p></dd>

    <dt><code><b>--git-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional common option to be passed to the git program. Note that
    the common options are the ones that precede the <code><b>git</b></code>
    command. See <code><b>--git</b></code> for more information on the git
    program. Repeat this option to specify multiple git options.</dd>

    <dt><code><b>--sha256</b></code> <code><i>path</i></code></dt>
    <dd>The sha256 program to be used to calculate SHA256 sums. Currently,
    <code><b>bpkg</b></code> recognizes <code><b>sha256</b></code>,
    <code><b>sha256sum</b></code>, and <code><b>shasum</b></code>. Note that
    the last component of <code><i>path</i></code> must contain one of these
    names as a substring in order for <code><b>bpkg</b></code> to recognize
    which program is being used. You can also specify additional options that
    should be passed to the sha256 program with
    <code><b>--sha256-option</b></code>.

    <p>If the sha256 program is not specified, then <code><b>bpkg</b></code>
    will try to discover if one of the above programs is available and use
    that. Currently, <code><b>bpkg</b></code> has the following preference
    order: <code><b>sha256</b></code>, <code><b>sha256sum</b></code>, and
    <code><b>shasum</b></code>.</p></dd>

    <dt><code><b>--sha256-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional option to be passed to the sha256 program. See
    <code><b>--sha256</b></code> for more information on the sha256 program.
    Repeat this option to specify multiple sha256 options.</dd>

    <dt><code><b>--tar</b></code> <code><i>path</i></code></dt>
    <dd>The tar program to be used to extract package archives. For example,
    <code><b>gtar</b></code> or <code><b>bsdtar</b></code>. You can also
    specify additional options that should be passed to the tar program with
    <code><b>--tar-option</b></code>. If the tar program is not explicitly
    specified, then <code><b>bpkg</b></code> will use <code><b>tar</b></code>
    by default.</dd>

    <dt><code><b>--tar-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional option to be passed to the tar program. See
    <code><b>--tar</b></code> for more information on the tar program. Repeat
    this option to specify multiple tar options.</dd>

    <dt><code><b>--openssl</b></code> <code><i>path</i></code></dt>
    <dd>The openssl program to be used for crypto operations. You can also
    specify additional options that should be passed to the openssl program
    with <code><b>--openssl-option</b></code>. If the openssl program is not
    explicitly specified, then <code><b>bpkg</b></code> will use
    <code><b>openssl</b></code> by default.

    <p>The <code><b>--openssl*</b></code> values can be optionally qualified
    with the openssl command in the
    <code><i>command</i><b>:</b><i>value</i></code> form. This makes the value
    only applicable to the specific command, for example:</p>

    <pre>bpkg rep-create                      \
  --openssl pkeyutl:/path/to/openssl \
  --openssl-option pkeyutl:-engine   \
  --openssl-option pkeyutl:pkcs11    \
  ...</pre>

    <p>Note that for <code><b>openssl</b></code> versions prior to
    <code><b>3.0.0</b></code> <code><b>bpkg</b></code> uses the
    <code><b>rsautl</b></code> command instead of <code><b>pkeyutl</b></code>
    for the data signing and recovery operations.</p>

    <p>An unqualified value that contains a colon can be specified as
    qualified with an empty command, for example, <code><b>--openssl
    :C:\bin\openssl</b></code>. To see openssl commands executed by
    <code><b>bpkg</b></code>, use the verbose mode (<code><b>-v</b></code>
    option).</p></dd>

    <dt><code><b>--openssl-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional option to be passed to the openssl program. See
    <code><b>--openssl</b></code> for more information on the openssl program.
    The values can be optionally qualified with the openssl command, as
    discussed in <code><b>--openssl</b></code>. Repeat this option to specify
    multiple openssl options.</dd>

    <dt><code><b>--auth</b></code> <code><i>type</i></code></dt>
    <dd>Types of repositories to authenticate. Valid values for this option
    are <code><b>none</b></code>, <code><b>remote</b></code>,
    <code><b>all</b></code>. By default only remote repositories are
    authenticated. You can request authentication of local repositories by
    passing <code><b>all</b></code> or disable authentication completely by
    passing <code><b>none</b></code>.</dd>

    <dt><code><b>--trust</b></code> <code><i>fingerprint</i></code></dt>
    <dd>Trust repository certificate with a SHA256
    <code><i>fingerprint</i></code>. Such a certificate is trusted
    automatically, without prompting the user for a confirmation. Repeat this
    option to trust multiple certificates.

    <p>Note that by default <code><b>openssl</b></code> prints a SHA1
    fingerprint and to obtain a SHA256 one you will need to pass the
    <code><b>-sha256</b></code> option, for example:</p>

    <pre>openssl x509 -sha256 -fingerprint -noout -in cert.pem</pre></dd>

    <dt><code><b>--trust-yes</b></code></dt>
    <dd>Assume the answer to all authentication prompts is
    <code><b>yes</b></code>.</dd>

    <dt><code><b>--trust-no</b></code></dt>
    <dd>Assume the answer to all authentication prompts is
    <code><b>no</b></code>.</dd>

    <dt><code><b>--git-capabilities</b></code> <code><i>up</i></code>=<code><i>pc</i></code></dt>
    <dd>Protocol capabilities (<code><i>pc</i></code>) for a
    <code><b>git</b></code> repository URL prefix (<code><i>up</i></code>).
    Valid values for the capabilities are <code><b>dumb</b></code> (no shallow
    clone support), <code><b>smart</b></code> (support for shallow clone, but
    not for fetching unadvertised commits), <code><b>unadv</b></code> (support
    for shallow clone and for fetching unadvertised commits). For example:

    <pre>bpkg build https://example.org/foo.git#master \
  --git-capabilities https://example.org=smart</pre>

    <p>See <a
    href="bpkg-repository-types.xhtml"><code><b>bpkg-repository-types(1)</b></code></a>
    for details on the <code><b>git</b></code> protocol capabilities.</p></dd>

    <dt><code><b>--pager</b></code> <code><i>path</i></code></dt>
    <dd>The pager program to be used to show long text. Commonly used pager
    programs are <code><b>less</b></code> and <code><b>more</b></code>. You
    can also specify additional options that should be passed to the pager
    program with <code><b>--pager-option</b></code>. If an empty string is
    specified as the pager program, then no pager will be used. If the pager
    program is not explicitly specified, then <code><b>bpkg</b></code> will
    try to use <code><b>less</b></code>. If it is not available, then no pager
    will be used.</dd>

    <dt><code><b>--pager-option</b></code> <code><i>opt</i></code></dt>
    <dd>Additional option to be passed to the pager program. See
    <code><b>--pager</b></code> for more information on the pager program.
    Repeat this option to specify multiple pager options.</dd>

    <dt><code><b>--options-file</b></code> <code><i>file</i></code></dt>
    <dd>Read additional options from <code><i>file</i></code>. Each option
    should appear on a separate line optionally followed by space or equal
    sign (<code><b>=</b></code>) and an option value. Empty lines and lines
    starting with <code><b>#</b></code> are ignored. Option values can be
    enclosed in double (<code><b>"</b></code>) or single
    (<code><b>'</b></code>) quotes to preserve leading and trailing
    whitespaces as well as to specify empty values. If the value itself
    contains trailing or leading quotes, enclose it with an extra pair of
    quotes, for example <code><b>'"x"'</b></code>. Non-leading and
    non-trailing quotes are interpreted as being part of the option value.

    <p>The semantics of providing options in a file is equivalent to providing
    the same set of options in the same order on the command line at the point
    where the <code><b>--options-file</b></code> option is specified except
    that the shell escaping and quoting is not required. Repeat this option to
    specify more than one options file.</p></dd>

    <dt><code><b>--default-options</b></code> <code><i>dir</i></code></dt>
    <dd>The directory to load additional default options files from.</dd>

    <dt><code><b>--no-default-options</b></code></dt>
    <dd>Don't load default options files.</dd>

    <dt><code><b>--keep-tmp</b></code></dt>
    <dd>Don't remove the <code><b>bpkg</b></code>'s temporary directory at the
    end of the command execution and print its path at the verbosity level 2
    or higher. This option is primarily useful for troubleshooting.</dd>
  </dl>

  <h1>JSON OUTPUT</h1>

  <p>Commands that support the JSON output specify their formats as a
  serialized representation of a C++ <code><b>struct</b></code> or an array
  thereof. For example:</p>

  <pre>struct package
{
  string name;
};

struct configuration
{
  uint64_t         id;
  string           path;
  optional&lt;string> name;
  bool             default;
  vector&lt;package>  packages;
};</pre>

  <p>An example of the serialized JSON representation of
  <code><b>struct</b></code> <code><b>configuration</b></code>:</p>

  <pre>{
  "id": 1,
  "path": "/tmp/hello-gcc",
  "name": "gcc",
  "default": true,
  "packages": [
    {
      "name": "hello"
    }
  ]
}</pre>

  <p>This sections provides details on the overall properties of such formats
  and the semantics of the <code><b>struct</b></code> serialization.</p>

  <p>The order of members in a JSON object is fixed as specified in the
  corresponding <code><b>struct</b></code>. While new members may be added in
  the future (and should be ignored by older consumers), the semantics of the
  existing members (including whether the top-level entry is an object or
  array) may not change.</p>

  <p>An object member is required unless its type is
  <code><b>optional&lt;></b></code>, <code><b>bool</b></code>, or
  <code><b>vector&lt;></b></code> (array). For <code><b>bool</b></code>
  members absent means <code><b>false</b></code>. For
  <code><b>vector&lt;></b></code> members absent means empty. An empty
  top-level array is always present.</p>

  <p>For example, the following JSON text is a possible serialization of the
  above <code><b>struct</b></code> <code><b>configuration</b></code>:</p>

  <pre>{
  "id": 1,
  "path": "/tmp/hello-gcc"
}</pre>

  <h1>BUGS</h1>

  <p>Send bug reports to the
  <a href="mailto:users@build2.org">users@build2.org</a> mailing list.</p>

</div>

<div id="footer">
Copyright &#169; 2014-2024 the build2 authors.<br/>
Permission is granted to copy, distribute and/or modify this document under
the terms of the MIT License.
</div>

</body>
</html>
